﻿using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Input.Touch;
using Microsoft.Xna.Framework.Media;
using Microsoft.Phone.Tasks;

namespace GameForKids
{
    public enum InfoState
    {
        effectIN,
        effectOUT,
        ready,
        exit
    }

    public class InfoScreen : GameScreen
    {
        Texture2D background;
        Texture2D backgroundBottom;
        string HuongDanVN = "";
        string HuongDanEN = "";
        SpriteFont font;
        int alpha = 0;
        InfoState infostate;
        Vector2 posOfEN;
        int caoEN = 0;

        Vector2 posOfVN;
        int caoVN = 0;

        // dam may
        Texture2D cloud1;
        int cloud1_pos_x = 150;

        Texture2D cloud2;
        int cloud2_pos_x = 530;

        // mat troi
        Texture2D thesun;
        float sunRotate;
        Button buttonrate;

        public InfoScreen()
        {
            
        }

        public override void Activate(bool instancePreserved)
        {
            infostate = InfoState.effectIN;
            background = ScreenManager.Game.Content.Load<Texture2D>("Info/Images/infoBackground");
            backgroundBottom = ScreenManager.Game.Content.Load<Texture2D>("Info/Images/infoBackgroundBottom");
            HuongDanEN = "=================================================\n"
                            + "+ GameForKids: is a game for children, suitable for 1 to\n"
                            + "  5-year-old kid. In order to give them a chance to play\n"
                            + "  and learn at the same time, practice all the skills and\n"
                            + "  help us watch for their developing process\n"
                            + "+ This set of games includes functions:\n"
                            + "  - Training memory.\n"
                            + "  - Training reaction ability.\n"
                            + "  - Helping recognize sounds.\n"
                            + "  - Learn basic numbers and characters.\n"
                            + "  - Training logic thinking ability.\n"
                            + "  Furthermore, lots of continuously up to date ones in the\n"
                            + "  next versions.\n"
                            + "+ You can watch for their developing process via statistical\n"
                            + "  score tables under a chart, classifying in each mission, \n"
                            + "  and the name of an account.\n"
                            + "+ Beside that, you can change formulae for counting scores \n"
                            + "  which serves their ages and their ability!";
            HuongDanVN = "=================================================\n"
                            + "+ GameForKids: là một bộ trò chơi dành cho trẻ em, thích\n"
                            + "  hợp độ tuổi từ 1 đến 5. Với mục tiêu giúp các bé vừa học\n"
                            + "  vừa chơi, rèn luyện các kĩ năng và theo dõi quá trình \n"
                            + "  phát triển của bé.\n"
                            + "+ Bộ trò chơi bao gồm các chức năng:\n"
                            + "  - Luyện trí nhớ.\n"
                            + "  - Luyện khả năng phản xạ.\n"
                            + "  - Tập nhận biết âm thanh.\n"
                            + "  - Học chữ và số cơ bản.\n"
                            + "  - Luyện khả năng suy nghĩ logic.\n"
                            + "  Và còn rất nhiều bài học, sẽ được cập nhật liên tục\n"
                            + "  trong các phiên bản tiếp theo của chương trình.\n"
                            + "+ Bạn có thể theo dõi quá trình phát triển của con/em \n"
                            + "  thông qua các bảng điểm được thống kê dạng đồ thị, phân\n"
                            + "  theo màn chơi, tên tài khoản.\n"
                            + "+ Bên cạnh đó các bạn có thể thay đổi công thức tính điểm\n"
                            + "  cho phù hợp với độ tuổi và khả năng của trẻ !";
            font = ScreenManager.Game.Content.Load<SpriteFont>("Fonts/HelpFont");
            caoEN = (int)font.MeasureString(HuongDanEN).Y ;
            caoVN = (int)font.MeasureString(HuongDanVN).Y ;
            posOfEN = new Vector2(100,420);
            posOfVN = new Vector2(100, 450 + caoEN);
            cloud1 = ScreenManager.Game.Content.Load<Texture2D>("MainMenu/Images/cloud1");
            cloud2 = ScreenManager.Game.Content.Load<Texture2D>("MainMenu/Images/cloud2");
            thesun = ScreenManager.Game.Content.Load<Texture2D>("MainMenu/Images/the_sun");
            buttonrate = new Button(ScreenManager.Game.Content.Load<Texture2D>("Info/Images/buttonRate"),
                ScreenManager.Game.Content.Load<Texture2D>("Info/Images/buttonRate"),
                ScreenManager.Game.Content.Load<Texture2D>("Info/Images/buttonRate"));
            buttonrate.Location = new Point(710, -30);
            buttonrate.Clicked += buttonrate_Clicked;
            base.Activate(instancePreserved);
        }

        void buttonrate_Clicked(object sender, EventArgs e)
        {
            MarketplaceReviewTask marketplaceReviewTask = new MarketplaceReviewTask();
            marketplaceReviewTask.Show();
        }

        public override void Unload()
        { }

        public override void HandleInput(Microsoft.Xna.Framework.GameTime gameTime, InputState input)
        {
            PlayerIndex player;
            if (input.IsNewButtonPress(Buttons.Back, ControllingPlayer, out player))
            {
                infostate = InfoState.effectOUT;

            }

          
            foreach (GestureSample gesture in input.Gestures)
            {
                switch (gesture.GestureType)
                {
                    case GestureType.FreeDrag:
                        {
                            if (posOfEN.Y < 420 || posOfVN.Y < 420)
                            {
                                posOfEN.Y += gesture.Delta.Y;
                                posOfVN.Y += gesture.Delta.Y;
                            }
                        };break;
                }
            }
             TouchCollection touches = input.TouchState;
                 foreach(TouchLocation touch in touches)
                 {
                     buttonrate.TouchEvent(touch);
                 }
             

            base.HandleInput(gameTime, input);
        }

        public override void Update(Microsoft.Xna.Framework.GameTime gameTime, bool otherScreenHasFocus, bool coveredByOtherScreen)
        {
            TouchPanel.EnabledGestures = GestureType.FreeDrag;

            cloud1_pos_x -= 1;
            cloud2_pos_x -= 2;

            if (cloud1_pos_x < 0 - cloud1.Width)
                cloud1_pos_x = 800;
            if (cloud2_pos_x < 0 - cloud2.Width)
                cloud2_pos_x = 800;
            
            sunRotate += (float)Math.PI / 60;
            if (sunRotate >= (float)Math.PI * 2)
                sunRotate = 0;

            if (alpha < 250 && infostate == InfoState.effectIN)
                alpha += 40;
            else if (alpha >= 250 && infostate == InfoState.effectIN)
            {
                alpha = 255;
                infostate = InfoState.ready;

            }

            if (alpha > 40 && infostate == InfoState.effectOUT)
                alpha -=40;
            else if (alpha <= 40 && infostate == InfoState.effectOUT)
            {
                alpha = 0;
                infostate = InfoState.exit;
            }

            if (infostate == InfoState.exit)
            {
                GameForKids.gameState = GameState.MainMenu;
                ExitScreen();
            }

            posOfEN.Y -= 2;
            posOfVN.Y -= 2;

            if (posOfEN.Y < 0 - caoEN)
            {
                if (caoVN > 420)
                    posOfEN.Y = posOfVN.Y + caoVN + 30;
                else
                    posOfEN.Y = 450;

            }
            if (posOfVN.Y < 0 - caoVN)
            {
                if (caoEN > 420)
                    posOfVN.Y = posOfEN.Y + caoEN + 30;
                else
                    posOfVN.Y = 450;
            }


            base.Update(gameTime, otherScreenHasFocus, coveredByOtherScreen);
        }

        public override void Draw(Microsoft.Xna.Framework.GameTime gameTime)
        {
            SpriteBatch spritebatch = ScreenManager.SpriteBatch;
            spritebatch.Begin();
            spritebatch.Draw(background,new Rectangle(0,0,background.Width,background.Height),new Color(alpha,alpha,alpha));
            buttonrate.Draw(spritebatch);

            spritebatch.Draw(thesun,
                    new Vector2(140,100),
                    null,
                    new Color(alpha, alpha, alpha),
                    sunRotate,
                    new Vector2(thesun.Width/2,thesun.Height/2),
                    1.0f,
                    SpriteEffects.None,
                    0f);
            if (infostate == InfoState.ready)
            {
                spritebatch.DrawString(font,
                    HuongDanEN,
                    posOfEN,
                    Color.Purple);
                spritebatch.DrawString(font,
                    HuongDanVN,
                    posOfVN,
                    Color.Red);
            }
            // ve 2 cuc may
            spritebatch.Draw(cloud1, new Rectangle(cloud1_pos_x, 0, cloud1.Width, cloud1.Height), new Color(alpha, alpha, alpha));
            spritebatch.Draw(cloud2, new Rectangle(cloud2_pos_x, 70, cloud2.Width, cloud2.Height), new Color(alpha, alpha, alpha));

            spritebatch.Draw(backgroundBottom, new Rectangle(0, 0, backgroundBottom.Width, backgroundBottom.Height), new Color(alpha, alpha, alpha));

            spritebatch.DrawString(font, "v 1.0.2", new Vector2(30, 440), Color.White);
            spritebatch.End();
            base.Draw(gameTime);
        }

    }
}
